package bullgo

// // Event 事件类型基类
// type Event struct {
// 	savers []*EventSaver
// }

// // EventSaver 事件调度器中存放的单元
// type EventSaver struct {
// 	Type      string
// 	Listeners []*EventListener
// }

// // EventListener 监听器
// type EventListener struct {
// 	Handler EventHandler
// }

// // EventHandler 监听器函数
// type EventHandler func(data interface{})

// // // IEventDispatcher 事件调度接口
// // type IEventDispatcher interface {
// // 	//事件监听
// // 	AddEventListener(eventType string, listener *EventListener)
// // 	//移除事件监听
// // 	RemoveEventListener(eventType string, listener *EventListener) bool
// // 	//是否包含事件
// // 	HasEventListener(eventType string) bool
// // 	//事件派发
// // 	DispatchEvent(event Event) bool
// // }

// // AddEventListener 事件调度器添加事件
// func (e *Event) AddEventListener(eventType string, listener *EventListener) {
// 	for _, saver := range e.savers {
// 		if saver.Type == eventType {
// 			saver.Listeners = append(saver.Listeners, listener)
// 			return
// 		}
// 	}

// 	saver := &EventSaver{Type: eventType, Listeners: []*EventListener{listener}}
// 	e.savers = append(e.savers, saver)
// }

// // On ...
// func (e *Event) On(eventType string, listener *EventListener) {
// 	e.AddEventListener(eventType, listener)
// }

// // RemoveEventListener 事件调度器移除某个监听
// func (e *Event) RemoveEventListener(eventType string, listener *EventListener) bool {
// 	for _, saver := range e.savers {
// 		if saver.Type == eventType {
// 			for i, l := range saver.Listeners {
// 				if listener == l {
// 					saver.Listeners = append(saver.Listeners[:i], saver.Listeners[i+1:]...)
// 					return true
// 				}
// 			}
// 		}
// 	}
// 	return false
// }

// // RemoveAllEventListener 事件调度器移除某个监听
// func (e *Event) RemoveAllEventListener(eventType string, listener *EventListener) {
// 	e.savers = e.savers[0:0]
// }

// // HasEventListener 事件调度器是否包含某个类型的监听
// func (e *Event) HasEventListener(eventType string) bool {
// 	for _, saver := range e.savers {
// 		if saver.Type == eventType {
// 			return true
// 		}
// 	}
// 	return false
// }

// // Emit 事件调度器派发事件
// func (e *Event) Emit(eventType string, data interface{}) bool {
// 	for _, saver := range e.savers {
// 		if saver.Type == eventType {
// 			for _, listener := range saver.Listeners {
// 				listener.Handler(data)
// 			}
// 			return true
// 		}
// 	}
// 	return false
// }
